
package GUI;

import controladoresJPA.ConnectionFactory;
import controladoresJPA.ProductoJpaController;
import controladoresJPA.exceptions.IllegalOrphanException;
import controladoresJPA.exceptions.NonexistentEntityException;
import controladoresJPA.exceptions.PreexistingEntityException;
import entregapersistencia.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;

/**
 * @author Hern&aacute;ndez Abahonza Diana Carolina 1031083
 * @author L&oacute;pez Juan Camilo
 * @author Moncada Mu&nacute;oz Juan David
 */
public class PanelProducto extends JPanel implements ActionListener {
    
    private JLabel lProducto;
    private ArrayList<JLabel> lDatosProducto;
    private ArrayList<JTextField> tfDatosProducto;
    private ArrayList<String> stDatosProducto;
    private JButton bCrearProducto;
    private JButton bModificarProducto;
    private JButton bEliminarProducto;
    ConnectionFactory fabrica;
    ProductoJpaController controlador;
    Producto producto;
    Blusa blusa;
    Brasier brasier;
    Chaqueta chaqueta;
    DescuentosProducto descuentos;
    DetallesProducto detalles;
    Jean jean;
    Libro libro;
    PreciosProducto precios;
    
    
    public PanelProducto(){
        this.setLayout(new BorderLayout(5,0));//ec, ef
	
	inicializarComponentes();
	organizarComponentes();
    }
    
    private void inicializarComponentes(){
        lProducto = new JLabel("Gestión Productos", new ImageIcon("images/shopping-bag-96x96.png"), SwingConstants.LEFT);
	lProducto.setFont(new Font("Arial", Font.BOLD, 18));
	lProducto.setForeground(new Color(78,79,99,190));
        
        lDatosProducto = new ArrayList<JLabel>();
	lDatosProducto.add( new JLabel( "Codigo del Producto:" ) );
	lDatosProducto.add( new JLabel( "Nombre del Producto:" ) );
        lDatosProducto.add( new JLabel( "Talla:" ) );
	lDatosProducto.add( new JLabel( "Imagen:" ) );
	lDatosProducto.add( new JLabel( "Empresa Fabricante:" ) );
	lDatosProducto.add( new JLabel( "Descripción:" ) );
	lDatosProducto.add( new JLabel( "Precio Unitario:" ) );
	lDatosProducto.add( new JLabel( "Fecha Inicio - Precio:" ) );
	lDatosProducto.add( new JLabel( "Fecha Fin - Precio:" ) );
	lDatosProducto.add( new JLabel( "Descuento Actual:" ) );
	lDatosProducto.add( new JLabel( "Fecha Inicio - Descuento:" ) );
	lDatosProducto.add( new JLabel( "Fecha Fin - Descuento:" ) );
	lDatosProducto.add( new JLabel( "Porcentaje IVA:" ) );
	lDatosProducto.add( new JLabel( "Unidades a Ingresar:" ) );
	lDatosProducto.add( new JLabel( "Producto:" ) );
        
        tfDatosProducto = new ArrayList<JTextField>();
        stDatosProducto = new ArrayList<String>();
        
        fabrica = new ConnectionFactory();
        controlador = new ProductoJpaController(fabrica.getFactory());
        producto = new Producto();
        descuentos = new DescuentosProducto();
        detalles = new DetallesProducto();
        precios = new PreciosProducto();
        
        for(int i=0; i<lDatosProducto.size(); i++){
            lDatosProducto.get(i).setFont(new Font("Arial", Font.BOLD, 14));
            lDatosProducto.get(i).setForeground(new Color(78,79,99,190));
            
            tfDatosProducto.add( new JTextField( "" ) );
	}
			
	bCrearProducto = new JButton("Crear");
	configurarBoton(bCrearProducto);
	bModificarProducto = new JButton("Modificar");
	configurarBoton(bModificarProducto);
	bEliminarProducto = new JButton("Eliminar");
	configurarBoton(bEliminarProducto);
    }
    
    private void configurarBoton(JButton boton) {
        boton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
	boton.setRolloverEnabled(false); // Quita la iluminacion al pasar el mouse por el boton 
	//boton.setBorderPainted(false); // Quita el borde del boton
	boton.setBackground(new Color(0,0,0,0)); // Fondo Transparente
	boton.addActionListener(this); // Escucha del boton
    }
    
    private void organizarComponentes() {
        /* ****************** Parte Norte Pestanna */
        JPanel pTexto = new JPanel();
	pTexto.setBorder(BorderFactory.createEmptyBorder(60,110,15,110));//n,w,s,e
	pTexto.setBackground(new Color(0,0,0,0));
	pTexto.add(lProducto);
        
        /* ****************** Parte Central Pestanna */
        
        JPanel pFormulario = new JPanel(new GridLayout(lDatosProducto.size(),2,0,2));
	pFormulario.setBorder(BorderFactory.createEmptyBorder(15,110,15,110));//n,w,s,e
	pFormulario.setBackground(new Color(0,0,0,0));
        for(int i=0; i<lDatosProducto.size(); i++){
            pFormulario.add(lDatosProducto.get(i));
            pFormulario.add(tfDatosProducto.get(i));
	}
        
        /* ****************** Parte Sur Pestanna */
				
	JPanel pBoton = new JPanel(new GridLayout(1,3,5,0));
	pBoton.setBorder(BorderFactory.createEmptyBorder(15,110,60,110));//n,w,s,e
	pBoton.setBackground(new Color(0,0,0,0));
	pBoton.add(bCrearProducto);
	pBoton.add(bModificarProducto);
	pBoton.add(bEliminarProducto);
	
	/* ****************** General Pestanna */
	
	this.add(pTexto, BorderLayout.NORTH);
	this.add(pFormulario, BorderLayout.CENTER);
	this.add(pBoton, BorderLayout.SOUTH);
    }
    
    private void capturarDatos(){
        stDatosProducto.clear();
        stDatosProducto.add(tfDatosProducto.get(0).getText());
        stDatosProducto.add(tfDatosProducto.get(1).getText());
        stDatosProducto.add(tfDatosProducto.get(2).getText());
        stDatosProducto.add(tfDatosProducto.get(3).getText());
        stDatosProducto.add(tfDatosProducto.get(4).getText());
        stDatosProducto.add(tfDatosProducto.get(5).getText());
        stDatosProducto.add(tfDatosProducto.get(6).getText());
        stDatosProducto.add(tfDatosProducto.get(7).getText());
        stDatosProducto.add(tfDatosProducto.get(8).getText());
        stDatosProducto.add(tfDatosProducto.get(9).getText());
        stDatosProducto.add(tfDatosProducto.get(10).getText());
        stDatosProducto.add(tfDatosProducto.get(11).getText());
        stDatosProducto.add(tfDatosProducto.get(12).getText());
        stDatosProducto.add(tfDatosProducto.get(13).getText());
        stDatosProducto.add(tfDatosProducto.get(14).getText());
        
    }
    
    private void crearProducto() { //codigo, nombre, imagen, empresa, iva, talla, unidades
        
        capturarDatos();
        
        producto.setCodigo(stDatosProducto.get(0));
        producto.setNombre(stDatosProducto.get(1));
        producto.setImagen(stDatosProducto.get(3));
        producto.setEmpresaFabricante(stDatosProducto.get(4));
        producto.setIva(Integer.getInteger(stDatosProducto.get(12)));
        producto.setTalla(stDatosProducto.get(2));
        producto.setUnidadesDisponibles(Integer.getInteger(stDatosProducto.get(13)));
        
        try {
            controlador.create(producto);
            JOptionPane.showMessageDialog(this, "Producto Ingresada en el Catalogo");
        } catch (PreexistingEntityException ex) {
            Logger.getLogger(PanelProducto.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(this, "Producto Ya Existente");
        } catch (Exception ex) {
            Logger.getLogger(PanelProducto.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(this, "Producto no guardada en el catalogo");
        }
    }

    private void modificarProducto() {
        
        capturarDatos();
        
        producto.setCodigo(stDatosProducto.get(0));
        producto.setNombre(stDatosProducto.get(1));
        producto.setImagen(stDatosProducto.get(3));
        producto.setEmpresaFabricante(stDatosProducto.get(4));
        producto.setIva(Integer.getInteger(stDatosProducto.get(12)));
        producto.setTalla(stDatosProducto.get(2));
        producto.setUnidadesDisponibles(Integer.getInteger(stDatosProducto.get(13)));
        
        try{
            controlador.edit(producto);
            JOptionPane.showMessageDialog(this, "Producto modificada correctamente");
        }catch(Exception e){
            JOptionPane.showMessageDialog(this, "Producto no existente");
        }
    }

    private void eliminarProducto() {
        
        capturarDatos();

        try {
            controlador.destroy(stDatosProducto.get(0));
            JOptionPane.showMessageDialog(this, "Producto eliminado correctamente");
        } catch (IllegalOrphanException ex) {
            Logger.getLogger(PanelProducto.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(this, "Producto eliminado correctamente");
        } catch (NonexistentEntityException ex) {
            JOptionPane.showMessageDialog(this, "Producto eliminado correctamente");
        }
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==bCrearProducto){
            crearProducto();
	}
		
	if(e.getSource()==bModificarProducto){
            modificarProducto();
	}
        
        if(e.getSource()==bEliminarProducto){
            eliminarProducto();
	}
    }
    
}
